[iPhone Obj-C] How to move a label with the wave of the iPhone?

Posted by Didi on Stack Overflow See other posts from Stack Overflow or by Didi
Published on 2010-04-30T16:25:01Z Indexed on 2010/04/30 16:27 UTC
Read the original article Hit count: 194

Filed under:
|
|

The code below is from the book Beginning iPhone 3 Development, chapter 15, using the accelerometer to control a ball. I want to use a label instead of the ball, and only move in the x direction. However, I donno how to revise the code to achieve this goal. Can anyone please help me? THX so much!!!!

  • (id)initWithCoder:(NSCoder *)coder {

    if (self = [super initWithCoder:coder]) { self.image = [UIImage imageNamed:@"ball.png"]; self.currentPoint = CGPointMake((self.bounds.size.width / 2.0f) + (image.size.width / 2.0f), (self.bounds.size.height / 2.0f) + (image.size.height / 2.0f));

    ballXVelocity = 0.0f;
    ballYVelocity = 0.0f;
    

    } return self; }

  • (id)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { // Initialization code } return self; }

  • (void)drawRect:(CGRect)rect { // Drawing code [image drawAtPoint:currentPoint]; }

  • (void)dealloc { [image release]; [acceleration release];

    [super dealloc]; }

//#pragma mark - - (CGPoint)currentPoint {

return currentPoint;

} - (void)setCurrentPoint:(CGPoint)newPoint { previousPoint = currentPoint; currentPoint = newPoint;

if (currentPoint.x < 0) {
    currentPoint.x = 0;
    //ballXVelocity = 0;
    ballXVelocity = - (ballXVelocity / 2.0);
}
if (currentPoint.y < 0){
    currentPoint.y = 0;
    //ballYVelocity = 0;
    ballYVelocity = - (ballYVelocity / 2.0);
} 
if (currentPoint.x > self.bounds.size.width - image.size.width) {
    currentPoint.x = self.bounds.size.width  - image.size.width; 
     //ballXVelocity = 0;
    ballXVelocity = - (ballXVelocity / 2.0);
}
if (currentPoint.y > self.bounds.size.height - image.size.height) {
    currentPoint.y = self.bounds.size.height - image.size.height;
    //ballYVelocity = 0;
    ballYVelocity = - (ballYVelocity / 2.0);
}

CGRect currentImageRect = CGRectMake(currentPoint.x, currentPoint.y, 
                                     currentPoint.x + image.size.width, 
                                     currentPoint.y + image.size.height);
CGRect previousImageRect = CGRectMake(previousPoint.x, previousPoint.y,
                                      previousPoint.x + image.size.width,  
                                      currentPoint.y + image.size.width);
[self setNeedsDisplayInRect:CGRectUnion(currentImageRect,
                                        previousImageRect)];

}

  • (void)draw { static NSDate *lastDrawTime;

    if (lastDrawTime != nil) { NSTimeInterval secondsSinceLastDraw = -([lastDrawTime timeIntervalSinceNow]);

    ballYVelocity = ballYVelocity + -(acceleration.y *
                                      secondsSinceLastDraw);
    ballXVelocity = ballXVelocity + acceleration.x *
    secondsSinceLastDraw;
    
    
    CGFloat xAcceleration = secondsSinceLastDraw * ballXVelocity * 500;
    CGFloat yAcceleration = secondsSinceLastDraw * ballYVelocity * 500;
    
    
    self.currentPoint = CGPointMake(self.currentPoint.x + xAcceleration,
                                    self.currentPoint.y +yAcceleration);
    

    } // Update last time with current time [lastDrawTime release]; lastDrawTime = [[NSDate alloc] init];

}

© Stack Overflow or respective owner

Related posts about iphone

Related posts about objective-c